local jass = require 'jass.common'
---@class math "数学函数"
local math = math

--[弧度去死吧]
local deg = jass.Rad2Deg(1)
local rad = jass.Deg2Rad(1)

--[正弦]
function math.sin(r)
	return jass.Sin(r * rad)
end

--[余弦]
function math.cos(r)
	return jass.Cos(r * rad)
end

--[正切]
function math.tan(r)
	return jass.Tan(r * rad)
end

--[反正弦]
function math.asin(v)
	return jass.Asin(v) * deg
end

--[反余弦]
function math.acos(v)
	return jass.Acos(v) * deg
end

--[反正切]
function math.atan(v1, v2)
	return jass.Atan2(v1, v2) * deg
end

--[区间值]
function math.limit(value,min,max)
    return math.max( math.min(value,max) , min)
end 

--[差值]
function math.lerp(start,target,t)
    return start + (target-start) * t
end 

--[抛物线]
function math.parabola(s,m,t,n)
    local a = 2 * s - 4 * m + 2 * t 
    local b = -3 * s + 4 * m - t 
    local c = s 
    return a * n * n + b * n + c
end

--[阈值]
function math.threshold(value, threshold)
    return value / (1 + value / threshold)
end

--[随机数]
math.random2 = math.random
function math.random(v1,v2)
    if not v2 and v1 then
        return jass.GetRandomInt(1, math.modf(v1))
    end
    if v1 and v2 then
        local a1,b1 = math.modf(v1)
        local a2,b2 = math.modf(v2)
        if b1 > 0 or b2 > 0 then
            return jass.GetRandomReal(v1,v2)
        else
            return jass.GetRandomInt(a1,a2)
        end
    end
    return jass.GetRandomReal(0,1)
end

--[uint32_t]
function math.uint32_t(int)
    assert(math.type(int) == 'integer', ("%.02f 不是一个整数"):format(int) )
    return int & 0xffffffff
end 

function odd_run(odd)
    if odd>=100 then
        return true
    end
    return odd>0 and math.random(1000)<=odd*10
end

function int_grouping(int,count)
    local x = math.ceil(int / count)
    local y = (int - 1)%count + 1
    return x,y
end



return math